using System.Diagnostics;
using Castle.DynamicProxy;
namespace DynamicProxy;
//二。创建拦截器
public class LoggingInterceptor : IInterceptor
{
    public void Intercept(IInvocation invocation)
    {
        // 1. 记录方法开始调用
        Console.WriteLine($"调用方法: {invocation.Method.Name}");
        Console.WriteLine($"参数: {string.Join(", ", invocation.Arguments)}");
        // 2. 性能监控 - 记录开始时间
        var stopwatch = Stopwatch.StartNew();
        try
        {
            // 3. 执行实际方法
            invocation.Proceed();
            // 4. 记录方法成功完成
            stopwatch.Stop();
            Console.WriteLine($"方法完成: {invocation.Method.Name}, 耗时: {stopwatch.ElapsedMilliseconds}ms");
            // 5. 如果有返回值，记录返回值
            if (invocation.ReturnValue != null)
            {
                Console.WriteLine($"返回值: {invocation.ReturnValue}");
            }
        }
        catch (Exception ex)
        {
            // 6. 记录异常情况
            Console.WriteLine($"方法 {invocation.Method.Name} 抛出异常: {ex.Message}");
            throw; // 重新抛出异常
        }
    }
}